/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package arboles;

import java.lang.reflect.Array;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;



class Arbol
{
    private NodoArbol raiz;
    public NodoArbol corriente;
    
    /*Asociacion de conjunto de preguntas a los 
     * nodos de decision los array son el numero de respuestas posibles 
     * segun cual sea la misma se pasa al nodo respectivo
     
     */ 
    Map<String,int[]> conjunto_preguntas = new HashMap<String,int[]>();
    
    

     
    //construir un arbol vacio
    public Arbol()
    {
        raiz = null;
        /*0 pasa a nodo izq 1 pasa a der en este primer caso seria 0=no 1=si*/
        int[] resp = {0,1};
        conjunto_preguntas.put("enemigo",resp);
        
        conjunto_preguntas.put("distancia_<10",resp);
        
        /*luego cada nodo de desicion se asocia con la posicion del hash*/
   
        
    }
    public void anularCorriente(){
    
    this.corriente=null;
    }
     
    //insertar un nuevo ndo en el arbol de busqueda binaria
    public  void insertarNodo(int valorInsertar,String pregunta,boolean acc)
    {
        if(raiz == null)
            raiz = new NodoArbol(valorInsertar,pregunta); //crea nodo raiz
        else
            raiz.insertar(valorInsertar,pregunta,acc); //llama al metodo insertar       
    }
     
    // EMPIEZA EL RECORRIDO EN PREORDEN
    public synchronized void recorridoPreorden()
    {
        ayudantePreorden(raiz);
    }
    //meoto recursivo para recorrido en preorden
     
    private void ayudantePreorden(NodoArbol nodo)
    {
        if(nodo == null)
            return;
         
        System.out.print(nodo.clave + " ");     //mostrar clave del nodo
        ayudantePreorden(nodo.nodoizquierdo);   //recorre subarbol izquierdo
        ayudantePreorden(nodo.nododerecho);     //recorre subarbol derecho
    }
     
    //EMPEZAR RECORRIDO INORDEN
    public synchronized void recorridoInorden()
    {
        ayudanteInorden(raiz);
    }
     
    //meoto recursivo para recorrido inorden
    private void ayudanteInorden( NodoArbol nodo)
    {
        if(nodo == null)
            return;
         
        ayudanteInorden(nodo.nodoizquierdo);
        System.out.println(nodo.clave + " "+nodo.getPregunta());
        ayudanteInorden(nodo.nododerecho);
    }
     
    //EMPEZAR RECORRIDO PORORDEN
    public synchronized void recorridoPosorden()
    {
        ayudantePosorden(raiz);       
    }
     
    //meotod recursivo para recorrido posorden
    private void ayudantePosorden(NodoArbol nodo)
    {
        if( nodo == null )
            return;
         
        ayudantePosorden(nodo.nodoizquierdo);
        ayudantePosorden(nodo.nododerecho);
        System.out.print(nodo.clave + " ");
    }
   
    
 /*Devuelve null si no encontro accion a ejecutar o sea q faltaron datos para decidir*/   
    public String devolver_accion(){
    
        
        return null;
    }

   public String devolver_accion(Map<String, Integer> instancias_respuestas1) {
 int i=0;
 
 while(i!=-1){
       if(corriente==null) this.corriente=this.raiz;
       
       Integer inte=instancias_respuestas1.get(this.corriente.getPregunta());
       
       if(inte!=null)
        i = instancias_respuestas1.get(this.corriente.getPregunta()).intValue();
       else i=-1;
        
        
        if(i==1){
        this.corriente=this.corriente.nododerecho;
       
        }else if(i==0){
          this.corriente=this.corriente.nodoizquierdo;
              
        }else if(i==-1){
        return corriente.getAccion();
        }
            
 }          
        
        return null;
        
        
        
    }
    
    
}
